Ethernet switches maintain a forwarding table in a data plane to efficiently route packets. The forwarding table maps the destination addresses to one or more output ports. Upon receiving a packet from a source node S to a destination node D on a physical port p, a switch performs a lookup in the forwarding table for an address for D. If a match is found, then the packet is forwarded on the output port specified in the entry. If no entry is found, then the packet is flooded on all ports except the port p on which the packet is received. Other switches receiving the flooded packet may respond with information for forwarding the packet to its destination.
Typically switches fill a forwarding table through a learning mechanism. Upon receiving a packet from a source node S to a destination node D on a physical port p, a switch creates an entry in its forwarding table for source S with output as port p. If an entry already exists, then the switch refreshes the entry. Any entry that has not been refreshed in a specified “switch timeout period” is deleted from the forwarding table. Ethernet switches learn and maintain paths to each individual end-point separately, and forwarding tables grow linearly with the number of end-points.
Although today's commercial-off-the-shelf (COTS) switch supports a few thousand forwarding table entries, the forwarding tables are too small when the network is scaled to encompass thousands of servers, each with potentially tens of virtual machines. Typical switches support only few thousand entries. With virtualization, the number of MAC (Media Access Control) addresses seen even in a network of a thousand servers easily exceeds the forwarding table size. In addition, approaches that leverage VLANs (Virtual Local Area Network) to support multi-paths for high bisection bandwidth require multiple entries per destination MAC address in a switch. As a result of the small forwarding table size, more packets are flooded. This can lead to an unacceptably low performance and network breakdown.